Python数据分析(比率检验、方差分析、线性回归)

348次阅读
没有评论

共计 4582 个字符,预计需要花费 12 分钟才能阅读完成。

比率检验

总体比率指具有某种特征的个体所占有的比值。例如,学生中男生的比值,广告的点击率等。

比率检验用于检测总体比率是否与预期的假设一致。

比率检验可以分为如下两类:

  1. 单总体比率检验
  2. 双总体比率检验

关于比率检验,说明如下 :

  1. 比率检验的原假设为等值假设,备择假设为不等值假设(双边检验)
  2. 样本比率服从二项分布。当满足一定条件时,二项分布近似于正态分布
  3. 比率检验通过构造 Z 统计量来实现

单总体比率检验

前提条件:

  1. 样本容量充分大(n>30)
  2. np≥5
  3. n(1-p)≥5

案例:A 公司计划提高广告转化率,于是,公司老板聘请高级设计师小马,来对广告页面进行优化,进而提高转化率。小马设计完毕后,信誓旦旦立下军令状,扬言将广告页面转化率提升到 10%。一周之后,公司对小马的业绩进行考核,广告点击 500 次,转换用户 45 人。小马是否能算完成任务了呢?

import numpy as np
from scipy import stats

p = 45 / 500  # 样本比率
pi_0 = 0.1  # 总体比率
n = 500  # 样本容量
Z = (p - pi_0) / np.sqrt(pi_0 * (1 - pi_0) / n)  # 计算 Z 统计量
print("Z 统计量 ", Z)
P = stats.norm.cdf(Z)
print("P-Value:", P)

P>0.05,维持原假设,没有充分的理由证明小马没有完成任务。

双总体比率检验

前提条件:

  1. n1p1≥5
  2. n1(1-p1)≥5
  3. n2p2≥5
  4. n2(1-p2)≥5

案例:A 公司采用两种方式来对自己的训练营进行推广,A 方式成本较低但转化率也较低,B 方式成本较高但转化率也较高。现 A 公司领导对两种推广方式进行评估,本着降低成本的原则,现决定:除非 B 方式比 A 方式转化率高 2% 以上,才采用 B 方式,否则采用 A 方式。现分别采用两种推广方式进行测试,A 方式引进流量 1052 人,转化 13 人,B 方式引进流量 402 人,转化 10 人,请问 A 公司应该采用哪种方式来推广训练营?

原假设:pl-p2≤0.02(B 方式 p1 没有比 A 方式 p2 转化率多 2% 以上)
备择假设:p1-p2>0.02(B 方式比 A 方式转化率多 2% 以上)

## 样本比率
p1 = 10 / 402
p2 = 13 / 1052
## 定义比率的差值
d0 = 0.02
## 定义样本容量
n1 = 402
n2 = 1052
## 计算分母部分
denominator = np.sqrt((p1 * (1 - p1) / n1) + (p2 * (1 - p2) / n2))
Z = (p1 - p2 - d0) / denominator
print("Z 统计量:", Z)
P = stats.norm.sf(Z)
print("P-Value:", P)

P>0.05,维持原假设,没有充分的理由证明 B 方式比 A 方式转化率多 2% 以上,所以还是用 A 方式省钱。

方差分析

方差分析(ANOVA-Analysis of Variance),用于检测多个总体的均值是否相同(存在差异)。

方差分析可以分为两类:

  1. 单因素方差分析
  2. 多因素方差分析

关于方差分析,说明如下:

  1. 方差分析原假设为多个总体的均值相同,备择假设为至少两个总体的均值不同
  2. 方差分析通过构造 F 统计量来实现
  3. F 统计量服从 F 分布

单因素方差分析

单因素方差分析用来分析两个或多个样本 (来自不同总体) 的均值是否相等,进而可以用来检验分类变量与连续变量之间是否相关。检验方式为,根据分类变量的不同取值,将样本进行分组,然后根据每个分组的均值进行检验。

单因素方差分析的前提条件如下:

  1. 样本观测值之间独立
  2. 每个样本来自正态分布的总体
  3. 总体之间的方差是相同的

案例:某公司领导在年终对部门进行评估,在一年内,A,B 与 C 三个部门共收到投诉如下:

部门 投诉量
A 5
B 3
B 4
C 6
A 2

假设投诉量服从正态分布,请问三个部门的投诉量是否相同?

np.random.seed(0)
## 模拟随机生成 3 个部门的投诉数据
department_a = np.random.randint(5, 20, size=45)
department_b = np.random.randint(3, 15, size=60)
department_c = np.random.randint(7, 18, size=55)
## 进行 levene 检验,判断 3 个组的方差是否齐性
stats.levene(department_a, department_b, department_c)  # pvalue=0.42,说明方差相同
## 进行单因素方差分析
stats.f_oneway(department_a, department_b, department_c)

P<0.05,拒绝原假设,说明至少两个总体的均值不同,意味着这 3 个部门的投诉量是不一样的。

线性回归

回归分析是用来评估变量之间关系的统计过程。用来解释自变量 X 与因变量 Y 的关系。即当自变量 X 发生改变时,因变量 Y 会如何发生改变。

简单线性回归

这里以房屋面积 (x) 与房屋价格 (y) 为例,显而易见,二者是一种线性关系,房屋价格正比于房屋面积,我
们假设比例为 w:ŷ = w * x + b。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
## 用来切分训练集与测试集
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
## 设置输出的精度,默认为 8
np.set_printoptions(precision=2)
plt.rcParams["font.family"] = "SimHei"
plt.rcParams["font.size"] = 12
plt.rcParams["axes.unicode_minus"] = False

iris = load_iris()
## 花瓣长度作为 x,宽度作为 y
x, y = iris.data[:, 2].reshape(-1, 1), iris.data[:, 3]

lr = LinearRegression()
## 将数据集划分为训练集与测试集
## test_size:测试集大小
## random_state:随机种子
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)

## 使用训练集训练模型
lr.fit(x_train, y_train)
print(" 权重:", lr.coef_)
print(" 截距:", lr.intercept_)
## 从训练集学习得到模型的参数(w 与 b),确定方程,就可以进行预测
y_hat = lr.predict(x_test)
print(" 实际值:", y_test[:5])
print(" 预测值:", y_hat[:5])

plt.figure(figsize=(10, 6))
plt.scatter(x_train, y_train, c="orange", label=" 训练集 ")  # 散点图
plt.scatter(x_test, y_test, c="g", marker="D", label=" 测试集 ")
plt.plot(x, lr.predict(x), "r-")
plt.legend()
plt.xlabel(" 花瓣长度 ")
plt.ylabel(" 花瓣宽度 ")

plt.figure(figsize=(15, 6))
plt.plot(y_test, label=" 真实值 ", color="r", marker="o")
plt.plot(y_hat, label=" 预测值 ", ls="--", color="g", marker="o")
plt.xlabel(" 测试集数据序号 ")
plt.ylabel(" 数据值 ")
plt.legend()

回归模型评估

当我们建立好模型后,模型的效果如何呢?对于回归模型,可以采用如下的指标来进行衡量:

  • MSE
  • RMSE
  • MAE
  • R^2

R^2

R^2 为决定系数,用来表示模型拟合性的分值,值越高表示模型拟合性越好,在训练集中取值范围为 [0,1]。在测试集(未知数据) 中取值范围为(-∞,1]。

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

print(" 均方误差(MSE):", mean_squared_error(y_test, y_hat))
print(" 根均方误差(RMSE):", np.sqrt(mean_squared_error(y_test, y_hat)))
print(" 平均绝对值误差(MAE):", mean_absolute_error(y_test, y_hat))

print(" 训练集 R^2:", r2_score(y_train, lr.predict(x_train)))
print(" 测试集 R^2:", r2_score(y_test, y_hat))
## score 求解的就是 R^2 的值
print(" 训练集 R^2:", lr.score(x_train, y_train))
print(" 测试集 R^2:", lr.score(x_test, y_test))

多元线性回归

现实中的数据可能是比较复杂的,自变量也很可能不只一个。例如,影响房屋价格也很可能不只房屋面积一个因素,可能还有距地铁距离,距市中心距离,房间数量,房屋所在层数,房屋建筑年代等诸多因素。不过,这些因素,对房屋价格影响的力度 (权重) 是不同的,例如,房屋所在层数对房屋价格的影响就远不及房屋面积,因此,我们可以使用多个权重来表示多个因素与房屋价格的关系:

ŷ = w1 x1 + w2 x2 + w3 x3 + ··· + wn xn + b

data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
x, y = data, target

df = pd.DataFrame(np.concatenate([x, y.reshape(-1, 1)], axis=1), columns=["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV"])
df.head()

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)
## 使用训练集训练模型
lr.fit(x_train, y_train)
print(" 权重:", lr.coef_)
print(" 截距:", lr.intercept_)
y_hat = lr.predict(x_test)
print(" 训练集 R^2:", lr.score(x_train, y_train))
print(" 测试集 R^2:", lr.score(x_test, y_test))

正文完
 0
阿伯手记
版权声明:本站原创文章,由 阿伯手记 于2023-08-04发表,共计4582字。
转载说明:本站原创内容,除特殊说明外,均基于 CC BY-NC-SA 4.0 协议发布,转载须注明出处与链接。
评论(没有评论)
验证码

阿伯手记

阿伯手记
阿伯手记
喜欢编程,头发渐稀;成长路上,宝藏满地
文章数
767
评论数
207
阅读量
682255
今日一言
-「
热门文章
职场救急!AI请假话术生成器:1秒定制高通过率理由

职场救急!AI请假话术生成器:1秒定制高通过率理由

超级借口 不好开口?借口交给我!智能生成工作请假、上学请假、饭局爽约、约会拒绝、邀约推辞、万能借口等各种借口理...
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
TVAPP:开源电视盒子资源库,一键打造家庭影院

TVAPP:开源电视盒子资源库,一键打造家庭影院

导语 TVAPP 是一个专为 Android TV 电视盒子用户打造的开源影音资源库,集成了影视、直播、游戏等...
巴别英语:用美剧和TED演讲轻松提升英语听力与口语

巴别英语:用美剧和TED演讲轻松提升英语听力与口语

还在为枯燥的英语学习而烦恼吗?巴别英语通过创新的美剧学习模式,让英语学习变得生动有趣。平台提供海量美剧和 TE...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
2025年12月 每日精选

2025年12月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 12 月 26 日 .ax 顶级域 目前全球唯一...
123云盘限时福利:登录即送1个月VIP尊享权益!

123云盘限时福利:登录即送1个月VIP尊享权益!

🎁  零成本体验 20T 超大空间与会员加速通道 🎉 活动亮点 登录即送:无需任何复杂操作,登录账号直接领取 ...
最新评论
阿伯手记 阿伯手记 发了:https://aboss.top/moments/1064
吴蛋蛋 吴蛋蛋 快发小年快乐
吴蛋蛋 吴蛋蛋 Ask4Me,这个之前看server酱接入了
15220202929 15220202929 怎么用
八对 八对 麻烦大佬更新下【堆新】的友链站名:八对星星描述:极目星视穹苍无界•足履行者大地有疆链接:https://8dui.com图标:https://cf.8dui.com/logo.webp横标:https://cf.8dui.com/logo-w.webp订阅:https://8dui.com/rss.xml
三毛笔记 三毛笔记 已添加
DUINEW DUINEW 已添加贵站,期待贵站友链~博客名称:堆新博客地址:https://duinew.com/博客描述:堆新堆新,引力向新!——堆新(DUINEW)博客头像:https://d.duinew.com/logo.webp横版头像:https://d.duinew.com/logo-w.webp博客订阅:https://duinew.com/rss.xml
hedp hedp 没看懂
bingo bingo 直接生成就可以啦,也可以添加一些选项
热评文章
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 是一款基于 Fastify、Vercel 和 Supabase 构建的 URL 缩短服务...
清华大学官方免费DeepSeek教程

清华大学官方免费DeepSeek教程

AI 领域近期最引人注目的焦点当属 DeepSeek,这款由中国创新企业深度求索研发的人工智能工具,正以开放源...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
2026年2月 每日精选

2026年2月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 2 月 17 日 国家全民健身信息服务平台 过年...
DrawLink:一键生成链接视觉卡片,提升分享点击率

DrawLink:一键生成链接视觉卡片,提升分享点击率

小贴士 :此站或已变迁,但探索不止步。我们已为您备好「类似网站」精选合集,相信其中的发现同样能为您带来惊喜。
WebRTC Screen Mirror:基于浏览器免费开源投屏神器,可实现低延迟、跨平台屏幕共享

WebRTC Screen Mirror:基于浏览器免费开源投屏神器,可实现低延迟、跨平台屏幕共享

WebRTC Screen Mirror 是一款基于 WebRTC 技术的在线屏幕共享工具,它利用浏览器内置的...